package DataStructure.BinaryTreePra;

/**
 * @time: 2021/12/14/014 10:41
 * @author: Zhurunhe
 * @Version：1
 */
public class Node {
    private int no;
    private String name;
    private Node left;//左子树
    private Node right;//右子树




    //前序遍历：先输出父子节点，在遍历左子树和右子树
    public void preorderTraversal(){
        //1、先输出父子节点
        System.out.println(this);
        //2、遍历左子树
        if (this.left!=null){
            this.left.preorderTraversal();
        }
        //3、遍历右子树
        if (this.right!=null){
            this.right.preorderTraversal();
        }
    }
    public void removeNode(int no){
        if (this.left!=null&&this.left.no==no){
            this.left=null;
            return;
        }
        if (this.right!=null&&this.right.no==no){
            this.right=null;
            return;
        }
        if (this.left!=null){
            this.left.removeNode(no);
        }
        if (this.right!=null){
            this.right.removeNode(no);
        }

    }
    //前序遍历查找：匹对Node的no
    public Node preorderTraversalSearch(int no){
        System.out.println("前续查找次数~~");

        if (this.no==no){
            return this;
        }
        Node temp=null;

        if (this.left!=null){
             temp = this.left.preorderTraversalSearch(no);
        }
        //左子树节点查找到，则直接返回
        if (temp!=null){
            return temp;
        }
        if (this.right!=null){
            temp=this.right.preorderTraversalSearch(no);
        }
        return temp;
    }
    //中序遍历:先遍历左子树，再输出父节点，最后遍历右子树
    public void inorderTraversal(){
        //1、想遍历左子树
        if (this.left!=null){
            this.left.inorderTraversal();
        }
        //2、再输出父节点
        System.out.println(this);
        //3、最后遍历右子树
        if (this.right!=null){
            this.right.inorderTraversal();
        }
    }


    //中序遍历查找
    public Node inorderTraversalSearch(int no){
        Node temp=null;
        if(this.left!=null){
            temp=this.left.inorderTraversalSearch(no);
        }
        //左子树节点查找到，则直接返回
        if (temp!=null){
            return temp;
        }
        System.out.println("中续查找次数~~");
        if (this.no==no){
            return this;
        }
        if (this.right!=null){
            temp=this.right.inorderTraversalSearch(no);
        }
        return temp;
    }
    //后序遍历：先遍历左子树，再遍历右子树，最后数据父节点
    public void postorderTraversal(){
        //1、先遍历左子树
        if (this.left!=null){
            this.left.postorderTraversal();
        }
        //2、再遍历右子树
        if (this.right!=null){
            this.right.postorderTraversal();
        }
        //最后输出父子节点
        System.out.println(this);
    }
    //后序遍历查找
    public Node postorderTraversalSearch(int no){
        Node temp=null;
        if (this.left!=null){
            temp=this.left.postorderTraversalSearch(no);
        }
        //左子树节点查找到，则直接返回
        if (temp!=null){
            return temp;
        }
        if (this.right!=null){
            temp=this.right.postorderTraversalSearch(no);
        }
        //右子树节点查找到，则直接返回
        if (temp!=null){
            return temp;
        }

        System.out.println("后续查找次数~~");
        if (this.no==no){
            return this;
        }
        return temp;
    }



    public Node(int no, String name) {
        this.no = no;
        this.name = name;
    }

    public Node getLeft() {
        return left;
    }

    public void setLeft(Node left) {
        this.left = left;
    }

    public Node getRight() {
        return right;
    }

    public void setRight(Node right) {
        this.right = right;
    }

    public int getNo() {
        return no;
    }

    @Override
    public String toString() {
        return "Node{no=" + no + ", name='" + name +'}';
    }
}
